#ifndef DATA_CODEC_H_
#define DATA_CODEC_H_

#include <stdarg.h>
#include <stddef.h>
#include <stdint.h>

#define HEADER_SYNC 0x55AA
#define MAX_PACKET_SIZE 512        // 默认最大包大小，可以根据需要修改
#define DATA_CODEC_VERSION "1.0.0" // 版本号定义

// 数据包结构体定义
typedef struct
{
    uint16_t header;   // 数据包同步码，固定值0x55AA
    uint16_t len;      // 数据包总长度
    uint16_t crc;      // 校验和（累加计算，排除crc字段）
    uint16_t seq;      // 序列号
    uint16_t cmd;      // 命令
    uint16_t data_len; // 数据长度
    uint8_t data[];    // 可变长度数据
} pkt_t;

// 日志级别枚举
typedef enum
{
    LOG_NONE,
    LOG_ERROR,
    LOG_INFO,
    LOG_DEBUG
} log_level_t;

// 日志函数指针类型
typedef void (*log_fn_t)(log_level_t level, const char *format, va_list args);

// 编码器结构体
typedef struct
{
    void (*encode)(const pkt_t *packet, const uint8_t *data, uint8_t *buffer, size_t *len);
    int (*decode)(const uint8_t *stream, size_t stream_len, pkt_t *packet);
    void (*set_log_level)(log_level_t level);
} data_codec_t;

// 初始化函数
void data_codec_init(data_codec_t *codec, log_level_t log_level, log_fn_t log_fn);

// 获取版本号
const char *data_codec_get_version(void);

#endif // DATA_CODEC_H_
